home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / bin / ccmakedep < prev    next >
Text File  |  2006-04-12  |  4KB  |  258 lines

  1. #!/bin/sh
  2. #
  3. # $Xorg: mdepend.cpp,v 1.3 2000/08/17 19:41:52 cpqbld Exp $
  4. #
  5. #    Do the equivalent of the 'makedepend' program, but do it right.
  6. #
  7. #    Usage:
  8. #
  9. #    makedepend [cpp-flags] [-w width] [-s magic-string] [-f makefile]
  10. #      [-o object-suffix]
  11. #
  12. #    Notes:
  13. #
  14. #    The C compiler used can be overridden with the environment
  15. #    variable "CC".
  16. #
  17. #    The "-v" switch of the "makedepend" program is not supported.
  18. #
  19. #
  20. #    This script should
  21. #    work on both USG and BSD systems.  However, when System V.4 comes out,
  22. #    USG users will probably have to change "silent" to "-s" instead of
  23. #    "-" (at least, that is what the documentation implies).
  24. #
  25. # $XFree86: xc/config/util/mdepend.cpp,v 3.9 2001/04/26 20:55:10 dawes Exp $
  26. #
  27.  
  28. CC="i686-pc-linux-gnu-gcc -E -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L                 -D_POSIX_SOURCE -D_XOPEN_SOURCE                 -D_BSD_SOURCE -D_SVID_SOURCE                  -D_GNU_SOURCE                  "
  29.  
  30. silent='-'
  31.  
  32. TMP=`pwd`/.mdep$$
  33. CPPCMD=${TMP}a
  34. DEPENDLINES=${TMP}b
  35. TMPMAKEFILE=${TMP}c
  36. MAGICLINE=${TMP}d
  37. ARGS=${TMP}e
  38.  
  39. trap "rm -f ${TMP}*; exit 1" 1 2 15
  40. trap "rm -f ${TMP}*; exit 0" 1 2 13
  41.  
  42. echo " \c" > $CPPCMD
  43. if [ `wc -c < $CPPCMD` -eq 1 ]
  44. then
  45.     c="\c"
  46.     n=
  47. else
  48.     c=
  49.     n="-n"
  50. fi
  51.  
  52. echo $n "$c" >$ARGS
  53.  
  54. files=
  55. makefile=
  56. magic_string='# DO NOT DELETE'
  57. objsuffix='.o'
  58. width=78
  59. endmarker=""
  60. verbose=n
  61. append=n
  62.  
  63. while [ $# != 0 ]
  64. do
  65.     if [ "$endmarker"x != x ] && [ "$endmarker" = "$1" ]; then
  66.     endmarker=""
  67.     else
  68.     case "$1" in
  69.         -D*|-I*|-U*)
  70.         echo $n " '$1'$c" >> $ARGS
  71.         ;;
  72.  
  73.         -g|-O)    # ignore so we can just pass $(CFLAGS) in
  74.         ;;
  75.  
  76.         *)
  77.         if [ "$endmarker"x = x ]; then
  78.             case "$1" in     
  79.             -w)
  80.                 width="$2"
  81.                 shift
  82.                 ;;
  83.             -s)
  84.                 magic_string="$2"
  85.                 shift
  86.                 ;;
  87.             -f*)
  88.                 if [ "$1" = "-f-" ]; then
  89.                 makefile="-"
  90.                 elif [ "$1" = "-f" ]; then
  91.                 makefile="$2"
  92.                 shift
  93.                 else
  94.                 echo "$1" | sed 's/^\-f//' >${TMP}arg
  95.                 makefile="`cat ${TMP}arg`"
  96.                 rm -f ${TMP}arg
  97.                 fi
  98.                 ;;
  99.             -o)
  100.                 objsuffix="$2"
  101.                 shift
  102.                 ;;
  103.             
  104.             --*)
  105.                 echo "$1" | sed 's/^\-\-//' >${TMP}end
  106.                 endmarker="`cat ${TMP}end`"
  107.                 rm -f ${TMP}end
  108.                 if [ "$endmarker"x = x ]; then
  109.                 endmarker="--"
  110.                 fi
  111.                 ;;
  112.             -v)
  113.                 verbose="y"
  114.                 ;;
  115.  
  116.             -a)
  117.                 append="y"
  118.                 ;;
  119.  
  120.             -cc)
  121.                 CC="$2"
  122.                 shift
  123.                 ;;
  124.  
  125.             -*)
  126.                 echo "Unknown option '$1' ignored" 1>&2
  127.                 ;;
  128.             *)
  129.                 files="$files $1"
  130.                 ;;
  131.             esac
  132.         fi
  133.         ;;
  134.     esac
  135.     fi
  136.     shift
  137. done
  138. echo ' $*' >> $ARGS
  139.  
  140. echo "#!/bin/sh" > $CPPCMD
  141. echo "exec $CC `cat $ARGS`" >> $CPPCMD
  142. chmod +x $CPPCMD
  143. rm $ARGS
  144.  
  145. case "$makefile" in
  146.     '')
  147.     if [ -r makefile ]
  148.     then
  149.         makefile=makefile
  150.     elif [ -r Makefile ]
  151.     then
  152.         makefile=Makefile
  153.     else
  154.         echo 'no makefile or Makefile found' 1>&2
  155.         exit 1
  156.     fi
  157.     ;;
  158.     -)
  159.     makefile=$TMPMAKEFILE
  160.     ;;
  161. esac
  162.  
  163. if [ "$verbose"x = "y"x ]; then 
  164.     cat $CPPCMD
  165. fi
  166.  
  167. echo '' > $DEPENDLINES
  168. for i in $files
  169. do
  170.     $CPPCMD $i       | sed -n "/^#/s;^;$i ;p"
  171.  
  172. done   | sed -e 's|/[^/.][^/]*/\.\.||g' -e 's|/\.[^.][^/]*/\.\.||g'     -e 's|"||g' -e 's| \./| |'   | awk '{
  173.  
  174.  
  175.  
  176.     if ($1 != $4  &&  $2 != "#ident" && $2 != "#pragma")
  177.         {
  178.         numparts = split( $1, ofileparts, "\." )
  179.         ofile = ""
  180.         for ( i = 1; i < numparts; i = i+1 )
  181.         {
  182.         if (i != 1 )
  183.             ofile = ofile "."
  184.         ofile = ofile ofileparts[i]
  185.         }
  186.         print ofile "'"$objsuffix"'", $4
  187.         }
  188.     }'   | sort -u   | awk '
  189.  
  190.  
  191.         {
  192.         newrec = rec " " $2
  193.         if ($1 != old1)
  194.         {
  195.         old1 = $1
  196.         if (rec != "")
  197.             print rec
  198.         rec = $1 ": " $2
  199.         }
  200.         else if (length (newrec) > '"$width"')
  201.         {
  202.         print rec
  203.         rec = $1 ": " $2
  204.         }
  205.         else
  206.         rec = newrec
  207.         }
  208.     END         {
  209.  
  210.         if (rec != "")
  211.         print rec
  212.         }'   | egrep -v '^[^:]*:[     ]*$' >> $DEPENDLINES
  213.  
  214.  
  215. trap "" 1 2 13 15    # Now we are committed
  216. case "$makefile" in
  217.     $TMPMAKEFILE)
  218.     ;;
  219.     *)
  220.     rm -f $makefile.bak
  221.     cp $makefile $makefile.bak
  222.     echo "Appending dependencies to $makefile"
  223.     ;;
  224. esac
  225.  
  226. #
  227. # If not -a, append the magic string and a blank line so that
  228. # /^$magic_string/+1,\$d can be used to delete everything from after
  229. # the magic string to the end of the file.  Then, append a blank
  230. # line again and then the dependencies.
  231. #
  232. if [ "$append" = "n" ]
  233. then
  234.     cat >> $makefile << END_OF_APPEND
  235.  
  236. $magic_string
  237.  
  238. END_OF_APPEND
  239.     ed $silent $makefile << END_OF_ED_SCRIPT
  240. /^$magic_string/+1,\$d
  241. w
  242. q
  243. END_OF_ED_SCRIPT
  244.     echo '' >>$makefile
  245. fi
  246.  
  247. cat $DEPENDLINES >>$makefile
  248.  
  249. case "$makefile" in
  250.     $TMPMAKEFILE)
  251.     cat $TMPMAKEFILE
  252.     ;;
  253.  
  254. esac
  255.  
  256. rm -f ${TMP}*
  257. exit 0
  258.